//
//  LVDatasourceHelper.h
//  Live
//
//  Created by Pie on 16/7/2.
//  Copyright © 2016年 Heller. All rights reserved.
//

#import "LVConnectStatusInfoView.h"
#define kStartPage 1

typedef void (^loadSuccess)(BOOL isSuccess);

/**
 提示界面图片样式
 */
typedef NS_ENUM(NSUInteger, StatusImagStyle) {
    kStyleEmptyNone = 0,        // 数据为空不显示状态
    kStyleEmptyDefault,         // 数据为空默认图片
    kStyleEmptySearch,          // 搜索为空图片
    kStyleEmptyPeople,          // 用户数据为空图片
    kStyleEmptyFans,            // 没有粉丝
    kStyleEmptyFollow,          // 没有关注
    kStyleEmptyMyLive,          // 直播列表数据为空图片
    kStyleEmptyOtherLive,       // 直播列表数据为空图片
    kStyleEmptyContribution,    // 贡献榜数据为空图片
    kStyleEmptySend,            // 送出
    kStyleEmptyChat,            // 私信列表为空的图片

};

/**
 提示界面类型
 */
typedef NS_ENUM(NSUInteger, StatusType) {
    
    kStatusViewTypeEmpty = 0,       // 数据为空
    kStatusViewTypeNetworkErr,      // 网络异常
};


@class LVDatasourceHelper;

@protocol LVDatasourceHelperProtocol <NSObject>

/**
 *  加载数据源
 */
- (void)reloadData;

/**
 *  加载更多
 */
- (void)loadMore;

/**
 *  刷新
 */
- (void)reload;

@optional

/**
 *  接口请求数据完毕
 *
 *  @param data    数据源
 *  @param errcode 错误码
 *  @param view    要显示的界面
 */
- (void)finish:(NSArray *)data errcode:(NSInteger)errcode inView:(UIView *)view;

/**
 *  移除空数据界面
 */
- (void)removeInView;

- (LVConnectStatusInfoView *)createStatusView:(StatusType)type errcode:(NSInteger)errcode inView:(UIView *)view;

@end

@interface LVDatasourceHelper : NSObject <LVDatasourceHelperProtocol>

@property (nonatomic, weak) id<UIScrollViewDelegate> scrollDelegate;

@property (nonatomic, strong) NSMutableArray *datas;
@property (nonatomic, assign) BOOL loadOnce;
@property (nonatomic, assign) int numberOfPage;
@property (nonatomic, assign) int currentPage;
@property (nonatomic, strong) NSDate *lastUpdateTime;
@property (nonatomic, strong) UIView *hintView;

@property (assign, nonatomic) BOOL firstPageRemoveList;  /**< 第一页时，是否清空整个列表，Default YES */
@property (nonatomic, assign) BOOL isLoading;/**< 是否正在加载 */
@property (nonatomic, assign) BOOL isReloading; /**< 是否是下拉刷新，否则是上拉刷新 */

@property (nonatomic, assign) BOOL showLoading;
@property (nonatomic, assign) BOOL coverHeader;
@property (nonatomic, assign) StatusImagStyle style;
@property (strong, nonatomic) UIScrollView *currentScrollView;
@property (strong, nonatomic) LVConnectStatusInfoView *statusInfoView;

@property (nonatomic, strong, readonly) NSMutableSet *showIndexes;
@property (nonatomic, assign, readonly) NSTimeInterval lastReloadTime;

@property (nonatomic, assign) BOOL endWatchRefeshList; /**< 结束观看直播，刷新列表 */
@property (nonatomic, assign) NSTimeInterval delayLoadingInterval; /**< 设置延迟加载loading显示间隔, 默认0.15，即150毫秒内数据返回了的不现实加载画面 */

/**
 刷新第一页
 */
- (void)reload;

/**
 加载更多
 */
- (void)loadMore;

/**
 自动刷新，但不现实显示出下拉刷新界面及动画
 */
- (void)reloadNotPullView;

/**
 自动下拉刷新，显示出下拉刷新界面及动画
 */
- (void)reloadAndAutoPullView;

/**
 清空当前列表状态页面
 */
- (void)resetStatus;

/**
 刷新数据源
 */
- (void)reloadData;

/**
 数据加载完成回调方法

 @param data    要插入的数据列表
 @param errcode 错误码
 @param view    加载动画所显示的View
 */
- (void)finish:(NSArray *)data errcode:(NSInteger)errcode inView:(UIView *)view;

/**
 结束加载更多动画
 */
- (void)endFooterRefreshing;
/**
 结束下拉刷新动画
 */
- (void)endHeaderRefreshing;


- (void)endRefreshingWithNoMoreData;

/**
 延迟显示加载页面
 */
- (void)delayLoading;

/**
 取消延迟显示加载页面
 */
- (void)cancelDelayLoading;

#pragma mark - Cell Display Animation

- (void)scaleAnimationCell:(UIView *)cell;
- (void)scaleSpringAnimationCell:(UIView *)cell;
- (void)rotationAnimationCell:(UIView *)cell;
- (void)moveInCell:(UIView *)cell;
- (void)rotationFromBottomAnimationForCell:(UIView *)cell;
- (void)animationForIndexPath:(NSIndexPath *)indexPath cell:(UIView *)cell;
@end
